//
//  SHStatusViewModel.swift
//  SHWeibo3
//
//  Created by teacher on 16/7/23.
//  Copyright © 2016年 teacher. All rights reserved.
//

import UIKit
// 该viewModel 为cell （原创微博转发微博和底部视图）服务
class SHStatusViewModel: NSObject {
    
    // 定义一个属性
    var status: SHStatus?
    // 微博认证用户图片
    var avatarImage: UIImage?
    //处理会员等级图片
    var memberImage: UIImage?
    // 微博来源处理富文本
    var sourceAttr: NSMutableAttributedString?
    // 转发数
    var repostsCountStr: String?
    // 评论数
    var commentsCountStr: String?
    // 表态数
    var attitudesCountStr: String?
    // 微博时间(只读属性 计算型)
    var sinaTimeStr: String?{
        return NSDate.sinaDate(status?.created_at ?? "")?.sinaDescripitionStr
    }
    // 原创微博富文本
    var originalContentAttr: NSMutableAttributedString?
    // 转发微博富文本
    var retweetContentAttr: NSMutableAttributedString?
    // 重载构造函数
    init(status: SHStatus) {
        super.init()
        self.status = status
        // 在viewModel调用重载构造函数初始化的时候 我们要对avatarImage&memberImage 赋值
        self.avatarImage = getAvatarImage(status.user?.verified)
        self.memberImage = getMemberImage(status.user?.mbrank)
        self.sourceAttr = getSourceStr(status.source)
        self.repostsCountStr = getSinaCount(status.reposts_count, tilte: "转发")
        self.commentsCountStr = getSinaCount(status.comments_count, tilte: "评论")
        self.attitudesCountStr = getSinaCount(status.attitudes_count, tilte: "赞")
        self.originalContentAttr = dealContentText(status.text)
        self.retweetContentAttr = dealContentText(status.retweeted_status?.text)
    }
}

extension SHStatusViewModel {
    // 处理表情字符串
    /*
    上海三期[笑cry]x[笑cry]x[笑cry]x[笑cry]
    上海三期表表表表
    01 [笑cry]     chs
    02 emoticon.chs   如果相同的 emoticon
    03 通过emoticon.path  得到image  文本附件  富文本
    */
    func dealContentText(text: String?) -> NSMutableAttributedString?{
        // printLog(text)
        // 判断是否有值
        guard let t = text else{
            return nil
        }
        // 得到一个富文本
        let allTextAttr = NSMutableAttributedString(string: t)
        // [笑cry]
        // 正则格式
        let regex = "\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]"
        // 遍历字符串
        /*
        -01 匹配的个数
        -02 匹配的结果（指针）
        -03 匹配的范围（指针）
        -04 匹配是否停止
        */
        /*
        - 正向遍历 导致富文本越界 崩溃
        [哈哈]和[哈哈]  range  （0,4）  range (5,4)
        *和[哈哈]
        *和*
        - 解决方法
        - 创建一个模型
        - string
        - range
        - 创建一个可变的临时数组 保存 这个模型
        - 倒着遍历可变的临时数组
        - 通过当前模型到表情一位数组中找对应的emoticon
        - 得到富文本
        - 替换富文本
        */
        // 创建一个临时可变数组
        var tempArray:[SHMatchResult] = [SHMatchResult]()
        
        (t as NSString).enumerateStringsMatchedByRegex(regex) { (count, string, range, _) -> Void in
            // 创建一个模型
            let matchResult = SHMatchResult(string: string.memory as? String, range: range.memory)
            tempArray.append(matchResult)
            
        }
        // 倒着遍历数组
        for match  in tempArray.reverse() {
            // 判断是否为nil
            guard let emoticon = SHEmoticonTools.sharedTools.searchEmoticons(match.string) else{
                continue
            }
            // 行高
            let lineHeight = UIFont.systemFontOfSize(15).lineHeight
            // 定义一个不可变的富文本
            let attr = NSAttributedString(emoticon: emoticon, y: -4, lineHeight: lineHeight)
            
            allTextAttr.replaceCharactersInRange(match.range, withAttributedString: attr)
        }
        return allTextAttr
    }
}

/*
- 转发 评论 赞 业务逻辑处理
    - 如果count <= 0  显示 转发 评论 赞 例如 0  显示 转发 评论 赞
    - 如果count > 0
        - 如果 count < 10000  数据是多少显示多少  例如  8888  显示 8888
        - 如果 count >= 10000  显示 x.x万       例如 12000  显示 1.2 万
        - 注意 如果 count%10000 = 0  显示  例如 20000 显示 2万
*/

extension SHStatusViewModel {
    //处理微博转发评论赞的业务逻辑
    func getSinaCount(count: Int, tilte: String) -> String{
        // 如果count <= 0
        if count <= 0 {
            return tilte
        }else {
            // count > 0
            
            // 小于10000
            if count < 10000 {
                return "\(count)"
            }else {
                let sinaCount = CGFloat(count/1000)/10
                //  字符串拼接
                var sinaCountStr = "\(sinaCount)万"
                // 如果字符串包含.0
                if sinaCountStr.containsString(".0") {
                    // 字符串替换
                    sinaCountStr = sinaCountStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                return sinaCountStr
            }
        }
        
    }
}

// MARK: 数据处理
extension SHStatusViewModel {
    // 处理微博认证用户图片/// 认证类型 -1：没有认证，1，认证用户，2,3,5: 企业认证，220: 达人
    func getAvatarImage(verified: Int?) -> UIImage?{
        // 判读他是否为nil
        guard let ver = verified else{
            return nil
        }
        
        switch ver {
        case 1:
            return UIImage(named: "avatar_vip")
        case 2,3,5:
            return UIImage(named: "avatar_enterprise_vip")
        case 220:
            return UIImage(named: "avatar_grassroot")
        default:
            return UIImage(named: "avatar_vgirl")
        }
        
    }
    
    // 处理会员等级图片/// 会员等级 1-6
    func getMemberImage(mbrank: Int?) -> UIImage?{
        // 判断他是否为nil
        guard let mbr = mbrank else {
            return nil
        }
        if mbr > 0 && mbr < 7 {
            return UIImage(named: "common_icon_membership_level\(mbr)")
        }
        return UIImage(named: "common_icon_membership")
    }
}

// 当前认为是MVVM开发模式
extension SHStatusViewModel{
    // 格式 来自 xxxx
    func getSourceStr(source: String?)-> NSMutableAttributedString{
        // 判断他是否为nil 而且是否保存">
        guard let s = source where s.containsString("\">") else{
            let str = "上海三期微博"
            return getSourceAttr(str)
        }
        // 起始位置和结束位置
        let startRange = s.rangeOfString("\">")!
        let endRange = s.rangeOfString("</")!
        
        
        // 字符串截取
        let result = s.substringWithRange(startRange.endIndex..<endRange.startIndex)
        return getSourceAttr(result)
    }
    // 处理显示微博来源的富文本
    func getSourceAttr(result: String) -> NSMutableAttributedString {
        // 最终显示格式
        let name = "来自 " + result
        // 得到range
        let range = (name as NSString).rangeOfString("来自")
        
        // 创建一个可变富文本
        let attr = NSMutableAttributedString(string: name)
        // 设置属性
        attr.addAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], range: range)
        
        return attr
    }
}
